NexusPi Git Node
GPIO.h HEAD (592c826d) Text, 4.30 KB
T8b949e// Copyright (C) 2026, Chad Attermann
T8b949e// This program is free software: you can redistribute it and/or modify
T8b949e// it under the terms of the GNU General Public License as published by
T8b949e// the Free Software Foundation, either version 3 of the License, or
T8b949e// (at your option) any later version.
T8b949e// This program is distributed in the hope that it will be useful,
T8b949e// but WITHOUT ANY WARRANTY; without even the implied warranty of
T8b949e// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
T8b949e// GNU General Public License for more details.
Tff7b72#Tff7b72pragma once
Tff7b72#Tff7b72ifdef HAS_GPIO
Tff7b72#Tff7b72include T8b949e<Arduino.h>
T8b949e// ============================
T8b949e// Pin definitions (EDIT THESE)
T8b949e// ============================
Tff7b72#Tff7b72define GPIO0_PIN 20 T8b949e// UART1_TX (P0.20)
Tff7b72#Tff7b72define GPIO1_PIN 19 T8b949e// UART1_RX (P0.19)
Tff7b72#Tff7b72define GPIO_PIN_COUNT 2
Te6edf3namespace Te6edf3GPIO Tb4b4b4{
Tff7b72enum Tb4b4b4{
Te6edf3GPIO0 Tff7b72= T79c0ff0Tb4b4b4,
Te6edf3GPIO1 Tff7b72= T79c0ff1Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tff7b72typedef Tffa657uint8_t Te6edf3IndexTb4b4b4;
Tff7b72enum Tb4b4b4{
Te6edf3MODE_INPUT Tff7b72= Te6edf3INPUTTb4b4b4,
Te6edf3MODE_OUTPUT Tff7b72= Te6edf3OUTPUTTb4b4b4,
Te6edf3MODE_UNKNOWN Tff7b72= T79c0ff255Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tff7b72typedef Tffa657uint8_t Te6edf3ModeTb4b4b4;
Tff7b72enum Tb4b4b4{
Te6edf3STATE_LOW Tff7b72= Te6edf3LOWTb4b4b4,
Te6edf3STATE_HIGH Tff7b72= Te6edf3HIGHTb4b4b4,
Te6edf3STATE_UNKNOWN Tff7b72= T79c0ff255Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tff7b72typedef Tffa657uint8_t Te6edf3StateTb4b4b4;
Tff7b72enum Te6edf3Disposition Tff7b72: Tffa657uint8_t Tb4b4b4{
Te6edf3DISP_UNKNOWNTb4b4b4,
Te6edf3DISP_INPUTTb4b4b4,
Te6edf3DISP_INPUT_LOWTb4b4b4,
Te6edf3DISP_INPUT_HIGHTb4b4b4,
Te6edf3DISP_OUTPUT_LOWTb4b4b4,
Te6edf3DISP_OUTPUT_HIGHTb4b4b4,
Tb4b4b4}Tb4b4b4;
T8b949e//typedef uint8_t Disposition;
Tff7b72inline Tffa657uint32_t Te6edf3_pinsTb4b4b4[Te6edf3GPIO_PIN_COUNTTb4b4b4]Tb4b4b4;
Tff7b72inline Te6edf3Mode Te6edf3_modesTb4b4b4[Te6edf3GPIO_PIN_COUNTTb4b4b4]Tb4b4b4;
T8b949e// ============================
T8b949e// GPIO control abstraction
T8b949e// ============================
Tff7b72inline Tffa657void Td2a8ffinitTb4b4b4(Tb4b4b4)
Tb4b4b4{
T8b949e// Set GPIO pins
Te6edf3_pinsTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72= Te6edf3GPIO0_PINTb4b4b4;
Te6edf3_pinsTb4b4b4[T79c0ff1Tb4b4b4] Tff7b72= Te6edf3GPIO1_PINTb4b4b4;
T8b949e// Start floating (high impedance)
Te6edf3pinModeTb4b4b4(Te6edf3_pinsTb4b4b4[Te6edf3GPIO0Tb4b4b4]Tb4b4b4, Te6edf3INPUTTb4b4b4)Tb4b4b4;
Te6edf3_modesTb4b4b4[Te6edf3GPIO0Tb4b4b4] Tff7b72= Te6edf3MODE_INPUTTb4b4b4;
Te6edf3pinModeTb4b4b4(Te6edf3_pinsTb4b4b4[Te6edf3GPIO1Tb4b4b4]Tb4b4b4, Te6edf3INPUTTb4b4b4)Tb4b4b4;
Te6edf3_modesTb4b4b4[Te6edf3GPIO1Tb4b4b4] Tff7b72= Te6edf3MODE_INPUTTb4b4b4;
Tb4b4b4}
Tff7b72inline Tffa657bool Td2a8ffsetModeTb4b4b4(Te6edf3Index Te6edf3indexTb4b4b4, Te6edf3Mode Te6edf3modeTb4b4b4)
Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3index Tff7b72> Tff7b72sizeofTb4b4b4(Te6edf3_pinsTb4b4b4)Tb4b4b4) Tff7b72return Tffa657falseTb4b4b4;
Te6edf3pinModeTb4b4b4(Te6edf3_pinsTb4b4b4[Te6edf3indexTb4b4b4]Tb4b4b4, Te6edf3modeTb4b4b4)Tb4b4b4;
Te6edf3_modesTb4b4b4[Te6edf3indexTb4b4b4] Tff7b72= Te6edf3modeTb4b4b4;
Tff7b72return Tffa657trueTb4b4b4;
Tb4b4b4}
Tff7b72inline Te6edf3Mode Td2a8ffgetModeTb4b4b4(Te6edf3Index Te6edf3indexTb4b4b4)
Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3index Tff7b72> Tff7b72sizeofTb4b4b4(Te6edf3_pinsTb4b4b4)Tb4b4b4) Tff7b72return Te6edf3MODE_UNKNOWNTb4b4b4;
Tff7b72return Te6edf3_modesTb4b4b4[Te6edf3indexTb4b4b4]Tb4b4b4;
Tb4b4b4}
Tff7b72inline Tffa657bool Td2a8ffisInputTb4b4b4(Te6edf3Index Te6edf3indexTb4b4b4) Tb4b4b4{ Tff7b72return Te6edf3getModeTb4b4b4(Te6edf3indexTb4b4b4) Tff7b72=Tff7b72= Te6edf3MODE_INPUTTb4b4b4; Tb4b4b4}
Tff7b72inline Tffa657bool Td2a8ffisOutputTb4b4b4(Te6edf3Index Te6edf3indexTb4b4b4) Tb4b4b4{ Tff7b72return Te6edf3getModeTb4b4b4(Te6edf3indexTb4b4b4) Tff7b72=Tff7b72= Te6edf3MODE_OUTPUTTb4b4b4; Tb4b4b4}
Tff7b72inline Tffa657bool Td2a8ffsetStateTb4b4b4(Te6edf3Index Te6edf3indexTb4b4b4, Te6edf3State Te6edf3stateTb4b4b4)
Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3index Tff7b72> Tff7b72sizeofTb4b4b4(Te6edf3_pinsTb4b4b4)Tb4b4b4) Tff7b72return Tffa657falseTb4b4b4;
T8b949e//setMode(index, MODE_OUTPUT);
Te6edf3digitalWriteTb4b4b4(Te6edf3_pinsTb4b4b4[Te6edf3indexTb4b4b4]Tb4b4b4, Te6edf3stateTb4b4b4)Tb4b4b4;
Tff7b72return Tffa657trueTb4b4b4;
Tb4b4b4}
Tff7b72inline Te6edf3State Td2a8ffgetStateTb4b4b4(Te6edf3Index Te6edf3indexTb4b4b4)
Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3index Tff7b72> Tff7b72sizeofTb4b4b4(Te6edf3_pinsTb4b4b4)Tb4b4b4) Tff7b72return Te6edf3STATE_UNKNOWNTb4b4b4;
Tff7b72return Tb4b4b4(Te6edf3StateTb4b4b4)Te6edf3digitalReadTb4b4b4(Te6edf3_pinsTb4b4b4[Te6edf3indexTb4b4b4]Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72inline Tffa657bool Td2a8ffisLowTb4b4b4(Te6edf3Index Te6edf3indexTb4b4b4) Tb4b4b4{ Tff7b72return Te6edf3getStateTb4b4b4(Te6edf3indexTb4b4b4) Tff7b72=Tff7b72= Te6edf3STATE_LOWTb4b4b4; Tb4b4b4}
Tff7b72inline Tffa657bool Td2a8ffisHighTb4b4b4(Te6edf3Index Te6edf3indexTb4b4b4) Tb4b4b4{ Tff7b72return Te6edf3getStateTb4b4b4(Te6edf3indexTb4b4b4) Tff7b72=Tff7b72= Te6edf3STATE_HIGHTb4b4b4; Tb4b4b4}
Tff7b72inline Tffa657bool Td2a8ffsetDispositionTb4b4b4(Te6edf3Index Te6edf3indexTb4b4b4, Te6edf3Disposition Te6edf3dispTb4b4b4)
Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3index Tff7b72> Tff7b72sizeofTb4b4b4(Te6edf3_pinsTb4b4b4)Tb4b4b4) Tff7b72return Tffa657falseTb4b4b4;
Tff7b72switch Tb4b4b4(Te6edf3dispTb4b4b4) Tb4b4b4{
Tff7b72case Tff7b72DISP_INPUTTb4b4b4:
Te6edf3setModeTb4b4b4(Te6edf3indexTb4b4b4, Te6edf3MODE_INPUTTb4b4b4)Tb4b4b4;
Tff7b72return Tffa657trueTb4b4b4;
Tff7b72case Tff7b72DISP_INPUT_LOWTb4b4b4:
Te6edf3setStateTb4b4b4(Te6edf3indexTb4b4b4, Te6edf3STATE_LOWTb4b4b4)Tb4b4b4;
Te6edf3setModeTb4b4b4(Te6edf3indexTb4b4b4, Te6edf3MODE_INPUTTb4b4b4)Tb4b4b4;
Tff7b72return Tffa657trueTb4b4b4;
Tff7b72case Tff7b72DISP_INPUT_HIGHTb4b4b4:
Te6edf3setStateTb4b4b4(Te6edf3indexTb4b4b4, Te6edf3STATE_HIGHTb4b4b4)Tb4b4b4;
Te6edf3setModeTb4b4b4(Te6edf3indexTb4b4b4, Te6edf3MODE_INPUTTb4b4b4)Tb4b4b4;
Tff7b72return Tffa657trueTb4b4b4;
Tff7b72case Tff7b72DISP_OUTPUT_LOWTb4b4b4:
Te6edf3setModeTb4b4b4(Te6edf3indexTb4b4b4, Te6edf3MODE_OUTPUTTb4b4b4)Tb4b4b4;
Te6edf3setStateTb4b4b4(Te6edf3indexTb4b4b4, Te6edf3STATE_LOWTb4b4b4)Tb4b4b4;
Tff7b72return Tffa657trueTb4b4b4;
Tff7b72case Tff7b72DISP_OUTPUT_HIGHTb4b4b4:
Te6edf3setModeTb4b4b4(Te6edf3indexTb4b4b4, Te6edf3MODE_OUTPUTTb4b4b4)Tb4b4b4;
Te6edf3setStateTb4b4b4(Te6edf3indexTb4b4b4, Te6edf3STATE_HIGHTb4b4b4)Tb4b4b4;
Tff7b72return Tffa657trueTb4b4b4;
Tff7b72defaultTff7b72:
Tff7b72return Tffa657falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72inline Te6edf3Disposition Td2a8ffgetDispositionTb4b4b4(Te6edf3Index Te6edf3indexTb4b4b4)
Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3index Tff7b72> Tff7b72sizeofTb4b4b4(Te6edf3_pinsTb4b4b4)Tb4b4b4) Tff7b72return Te6edf3DISP_UNKNOWNTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3getModeTb4b4b4(Te6edf3indexTb4b4b4) Tff7b72=Tff7b72= Te6edf3MODE_INPUT Tff7b72&Tff7b72& Te6edf3getStateTb4b4b4(Te6edf3indexTb4b4b4) Tff7b72=Tff7b72= Te6edf3STATE_LOWTb4b4b4) Tff7b72return Te6edf3DISP_INPUT_LOWTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3getModeTb4b4b4(Te6edf3indexTb4b4b4) Tff7b72=Tff7b72= Te6edf3MODE_INPUT Tff7b72&Tff7b72& Te6edf3getStateTb4b4b4(Te6edf3indexTb4b4b4) Tff7b72=Tff7b72= Te6edf3STATE_HIGHTb4b4b4) Tff7b72return Te6edf3DISP_INPUT_HIGHTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3getModeTb4b4b4(Te6edf3indexTb4b4b4) Tff7b72=Tff7b72= Te6edf3MODE_OUTPUT Tff7b72&Tff7b72& Te6edf3getStateTb4b4b4(Te6edf3indexTb4b4b4) Tff7b72=Tff7b72= Te6edf3STATE_LOWTb4b4b4) Tff7b72return Te6edf3DISP_OUTPUT_LOWTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3getModeTb4b4b4(Te6edf3indexTb4b4b4) Tff7b72=Tff7b72= Te6edf3MODE_OUTPUT Tff7b72&Tff7b72& Te6edf3getStateTb4b4b4(Te6edf3indexTb4b4b4) Tff7b72=Tff7b72= Te6edf3STATE_HIGHTb4b4b4) Tff7b72return Te6edf3DISP_OUTPUT_HIGHTb4b4b4;
Tff7b72return Te6edf3DISP_UNKNOWNTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72#Tff7b72endif
Served by rngit 1.5.2 - Generated in 0.03s